struct controller_metadata_t {
	bit<1> toController; //一个 1 位的比特字段，用于指示元数据是否需要发送到控制器
	bit<32> code; //一个 32 位的比特字段，用于存储控制器的代码
}

struct custom_metadata_t {
    // Metadata used in the normal pipeline
    bit<32> id;              //一个 32 位的比特字段，用于存储数据包的标识符
    // bit<1> matched;
    bit<1> use_blink;        // 一个 1 位的比特字段，用于指示是否使用 Blink 功能


    bit<1> is_retransmission;// 一个 1 位的比特字段，用于指示数据包是否是重传的

    // Metadata used for the next-hops
    bit<32> next_hop_port;   //一个 32 位的比特字段，用于存储下一跳的端口号
    IPv4Address nhop_ipv4;   //一个 32 位的比特字段，用于存储下一跳的 IPv4 地址

    bit<16> tcp_payload_len; // 一个 16 位的比特字段，用于存储 TCP 载荷的长度

    // Metadata to handle the timestamps for the flowcache
    bit<9> ingress_timestamp_second;         // 一个 9 位的比特字段，用于存储入口时间戳的秒部分
    bit<19> ingress_timestamp_millisecond;   // 一个 19 位的比特字段，用于存储入口时间戳的毫秒部分

    // Metadata used by the FlowCache
    bit<32> flowselector_cellid;             // 一个 32 位的比特字段，用于存储流选择器的单元 ID

    bit<1> selected;                         // 一个 1 位的比特字段，用于指示流是否被选择

    bit<2> bgp_ngh_type;                     // 一个 2 位的比特字段，用于存储 BGP 的下一跳类型
}
